package com.qf.service.impl;

import com.qf.dao.impl.CartDaoImpl;
import com.qf.dao.impl.GoodsDaoImpl;
import com.qf.pojo.Cart;
import com.qf.pojo.Goods;
import com.qf.service.CartService;

import java.util.HashMap;
import java.util.List;

/**
 * @author Wy
 * @version V1.0
 * @Project javaWeb项目
 * @Package com.qf.service.impl
 * @Description:
 * @Date 2022/5/25 17:09
 */
public class CartServiceImpl implements CartService {
    @Override
    public boolean createCart(Integer uid, Integer pid) {
        //1. 根据用户id和商品id, 到数据库中查询是否已经有这个商品的数据
        CartDaoImpl cartDao = new CartDaoImpl();
        Cart cart = cartDao.finDCartByUidAndPid(uid, pid);
        //根据商品id, 查询商品对象
        GoodsDaoImpl goodsDao = new GoodsDaoImpl();
        Goods goods = goodsDao.findById(pid);

        if(cart !=null){
            //2. 判断如果能够查询到这个购物项数据, 进行购买数量的添加
            //购买件数+1
            cart.setNum(cart.getNum()+1);
            //将商品对象放入购物车中
            cart.setGoods(goods);
            //从新计算总价钱 = 商品的购买数量 * 商品单价
            cart.setMoney(cart.getNum()*goods.getPrice());
            //调用dao, 将最新的购物车数据更新到表中
            cartDao.updateCart(cart);
        }else {
            //3. 判断如果查不到这个购物项的数据, 那么作为新的购物项添加到数据库中
            //因为cart购物车为null, 所以需要new创建购物车对象
            cart =new Cart();
            //用户id
            cart.setUid(uid);
            //商品id
            cart.setPid(pid);
            //购买数量
            cart.setNum(1);
            //将商品对象放入购物车中
            cart.setGoods(goods);
            //总价 = 购买数量 * 商品单价
            cart.setMoney(cart.getNum()*goods.getPrice());
           cartDao.insertCart(cart);


        }

        return true;
    }

    @Override
    public List<Cart> findCartListByUid(Integer uid) {
        //根据用户id, 查询购物项集合
        CartDaoImpl cartDao = new CartDaoImpl();
        List<Cart> cartList = cartDao.findCartListByUid(uid);
        //查询所有商品数据
        GoodsDaoImpl goodsDao = new GoodsDaoImpl();
        List<Goods> goodList = goodsDao.findGoodsAll();

        HashMap<String, Goods> goodsMap = new HashMap<>();
        if(goodList!=null){
            //以商品id作为key, 以商品对象作为value
            for (Goods goods : goodList) {
                goodsMap.put(String.valueOf(goods.getId()),goods);

            }
        }
        if(cartList!=null){
            for (Cart cart : cartList) {
                Goods goods = goodsMap.get(String.valueOf(cart.getPid()));
                if(goods!=null){
                    cart.setGoods(goods);
                }

            }
        }
        return cartList;
    }

    @Override
    public void updateCart(Integer cid, Integer num) {
        //1. 根据cid, 到数据库查询这个购物项的数据
        CartDaoImpl cartDao = new CartDaoImpl();
        Cart byId = cartDao.findById(cid);
        //2. 根据查询到的购物项的, 商品id, 到商品表中查询对应的商品数据
        GoodsServiceImpl goodsService = new GoodsServiceImpl();
        Goods goodsById = goodsService.findGoodsById(byId.getPid());
        //3. 从新计算总价 = 商品单价 * 商品购买数量
        byId.setNum(num);
        byId.setGoods(goodsById);
        byId.setMoney(goodsById.getPrice()*num);
        cartDao.updateCart(byId);
    }

    @Override
    public void deleteById(Integer id) {
        CartDaoImpl cartDao = new CartDaoImpl();
        cartDao.deleteById(id);
    }
}
